﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Entidades.Catalogo;
using Control.Catalogo;
using Entidades.General;
using Entidades.Solicitud;
using Oracle.DataAccess.Client;
using System.Data;
using Entidades.Consultas.Personalizadas;
using Entidades.Consultas;
using System.Configuration;
using System.Collections;
using Navegador.Vistas;
using Control.Solicitud;
using System.Web.UI.HtmlControls;

namespace SICOIA.UserControls.Bandejas
{
    public partial class uCBandejaSupervisor : ViewController
    {
        private CtrlSolicitudTrabajosRealizar ctrl = null;
        private CtrlBandejaSupervisor ctrlBandeja = null;
        string cadCriterio = "";
        string cadOrden = "";
        EntUsuario usuario = new EntUsuario();
        int totalObras = 0;
        int totalAfectado = 0;

        protected void Page_Load(object sender, EventArgs e)
        {
            if ((EntUsuario)Session["UserPemex"] == null)
                Response.Write("<script>parent.window.open('../Marcos/EndPEMEX.aspx','_top')</script>");
            else
                usuario = (EntUsuario)Session["UserPemex"];

            if (!IsPostBack)
            {
                lstTipoInstalacion.Items.Add(new ListItem("Localización", "L"));
                lstTipoInstalacion.Items.Add(new ListItem("Ductos", "D"));
                lstTipoInstalacion.Items.Add(new ListItem("Otros", "D"));
                lstTipoInstalacion.SelectedIndex = 0;
                LLenarComboTipoServicios("L");
                LLenarComboEstatusObra();

                generaParametrosConsulta(Request.Params["accion"]);
                ConsultarObras();
            }
        }

        protected void lstTipoInstalacion_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (lstTipoInstalacion.SelectedItem.ToString().Equals("Localización"))
                    LLenarComboTipoServicios("L");
                else if (lstTipoInstalacion.SelectedItem.ToString().Equals("Ductos"))
                    LLenarComboTipoServicios("D");
                else if (lstTipoInstalacion.SelectedItem.ToString().Equals("Otros"))
                    LLenarComboTipoServicios("O");

                UpdatePanelCuerpo.Update();
            }
            catch (Exception ex)
            {
                string a = ex.Message;

            }
        }

        private void LLenarComboTipoServicios(string tipo)
        {
            try
            {
                // llenamos el combo tipo de servicio
                CtrlTiposServicios controlTipoServicios = new CtrlTiposServicios();
                List<EntTipoServicio> listaTipoServicio = new List<EntTipoServicio>();

                listaTipoServicio =
                    (List<EntTipoServicio>)controlTipoServicios.ObtenerTodos()
                    .ConvertAll<EntTipoServicio>(delegate(IEntidad enti) { return (EntTipoServicio)enti; });


                var listaFiltrada = listaTipoServicio.Where(x => x.TrabajoRealizar == tipo);
                int contero = listaFiltrada.Count();

                this.chkTipoServicio.Items.Clear();
                this.chkTipoServicio.DataSource = listaFiltrada;
                this.chkTipoServicio.DataValueField = "CveTipoServicio";
                this.chkTipoServicio.DataTextField = "Descripcion";
                this.chkTipoServicio.DataBind();
            }
            catch (Exception ex)
            {
                string a = ex.Message;
            }
        }
        private string generaParametrosConsulta(string accion)
        {
            cadCriterio = "";
            cadOrden = cmbOrden.SelectedValue.ToString();


            if (accion !=null && accion.Trim().Equals("VerObrasPendientes"))
            {
                cadCriterio= " and A.CVE_ESTATUS <> 4 ";
            }

            if (txtValor.Text.Trim().Length > 0)
            {
                cadCriterio = " AND " + cmbCriterio.SelectedValue.ToString() + " = '" + txtValor.Text.Trim() + "'";
            }
            if (cmbEstatus.SelectedIndex > 0)
                if (cmbEstatus.SelectedValue.ToString().Trim().Equals("*0") || cmbEstatus.SelectedValue.ToString().Trim().Equals("*-1") ) // Buscar este status en obra
                    cadCriterio += " AND  SOL.CVE_ESTATUS = " + cmbEstatus.SelectedValue.ToString().Remove(0,1);
                else
                cadCriterio += " AND  V_OBRAS.CVE_ESTATUS_OBRA = " + cmbEstatus.SelectedValue.ToString();
            //CVE_TIPO_SERVICIO
            string[] tiposServicios = CheckboxListSelections(chkTipoServicio);
            if (tiposServicios.Count() > 0)
            {
                cadCriterio +=" AND A.CVE_TIPO_SERVICIO IN ("+ string.Join(",", tiposServicios)+") ";
            }
            return cadCriterio;
        }
        private string[] CheckboxListSelections(System.Web.UI.WebControls.CheckBoxList list)
        {
            ArrayList values = new ArrayList();
            for (int counter = 0; counter < list.Items.Count; counter++)
            {
                if (list.Items[counter].Selected)
                {
                    values.Add(list.Items[counter].Value);
                }
            }
            return (string[])values.ToArray(typeof(string));
        }
        private void ConsultarObras()
        {
            totalObras = 0;
            ctrl = new CtrlSolicitudTrabajosRealizar();
            generaParametrosConsulta("");
            List<EntObraConDetalle> lista =
            ctrl.CriteriosObtenerTodosBandeja(this.cadCriterio, this.cadOrden, usuario);

            rptConsulta.DataSource = lista;
            rptConsulta.DataBind();

            GuardarEstado("listaObras", lista);
            RegistrarPostBackAsincronosRepeater();

            TotalObr.Text = lista.Count.ToString();
            UpdatePanelResultado.Update();
            UpdatePanelAfectados.Visible = true;
        }
        protected void btnNuevo_Click(object sender, EventArgs e)
        {
                ConsultarObras();
        }
        /// <summary>
        /// Funcionando recupera los values seleccionados
        /// </summary>
        /// <returns></returns>
        private IEnumerable<int> getTiposServiciosSeleccionados()
        {

            IEnumerable<int> allChecked = from ListItem item in chkTipoServicio.Items
                                          where item.Selected
                                          select int.Parse(item.Value);

            return allChecked;
        }

        private void RegistrarPostBackAsincronosRepeater()
        {
            foreach (RepeaterItem item in rptConsulta.Items)
            {
                if (item.FindControl("lnkTitulo") != null)
                {
                    ScriptManager scr = new ScriptManager();
                    LinkButton lnk = item.FindControl("lnkTitulo") as LinkButton;
                    scr = ScriptManager.GetCurrent(this.Page);
                    scr.RegisterAsyncPostBackControl(lnk);
                }
            }
        }
        protected void rptConsulta_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            if (e.CommandName == "VerAfectados")
            {
                ctrlBandeja = new CtrlBandejaSupervisor();
                string cveObra = e.CommandArgument.ToString();

                List<IEntidad> lista = ctrlBandeja.ObtenerAfectadosPorObra(new EntSolicitudTrabajosRealizar() { CveTrabajoRealizar = int.Parse(cveObra) });
                rptAfectados.DataSource = lista;
                rptAfectados.DataBind();
                GuardarEstado("listaAfectados", lista);

                RegistrarPostBackAsincronosRepeater();
                TotalAfectados.Text = lista.Count().ToString();
                UpdatePanelAfectados.Update();
                TotalAfectados.Text = lista.Count().ToString();
            }
            else if (e.CommandName == "Eliminar")
            {
                ctrl = new CtrlSolicitudTrabajosRealizar();
                int claveObra = int.Parse(e.CommandArgument.ToString());
                ctrl.Eliminar(new EntSolicitudTrabajosRealizar() { CveTrabajoRealizar = claveObra });
                List<EntObraConDetalle> lista = (List<EntObraConDetalle>)ObtenerEstado("listaObras");
                int index = lista.FindIndex(o => o.CveTrabajoRealizar == claveObra);
                lista.RemoveAt(index);
                rptConsulta.DataSource = lista;
                rptConsulta.DataBind();

                GuardarEstado("listaObras", lista);
                UpdatePanelResultado.Update();
                UpdatePanelAfectados.Update();
            }
        }
        private void LLenarComboEstatusObra()
        {
            // llenamos el combo tipo de servicio
            CtrlEstatus ctrl = new CtrlEstatus();
            List<EntEstatus> lista = new List<EntEstatus>();

            lista =
                (List<EntEstatus>)ctrl.ObtenerTodosObra()
                .ConvertAll<EntEstatus>(delegate(IEntidad enti) { return (EntEstatus)enti; });

            this.cmbEstatus.Items.Clear();
            this.cmbEstatus.DataSource = lista;
            this.cmbEstatus.DataValueField = "CveEstatus";
            this.cmbEstatus.DataTextField = "Descripcion";
            this.cmbEstatus.DataBind();
            this.cmbEstatus.Items.Insert(1, new ListItem(" >Por Solicitar","*-1")); // El paquete identificara el * y buscara este status la Solicitud
            this.cmbEstatus.Items.Insert(2, new ListItem(" >Solicitadas", "*0"));   //El paquete identificara el * y buscara este status la Solicitud
            this.cmbEstatus.Items.Insert(0, new ListItem("Seleccione un Estatus"));

        }
        protected void rptConsulta_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            int tempObrNbr = 0;
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                EntObraConDetalle ent = ((EntObraConDetalle)e.Item.DataItem);
                if (int.Parse(ent.EstatusSolicitud) > 0) // no sea Por Solicitar ó Solicitada. significa que aun no ha entrado al proceso de distribucion de quien la atendera
                {
                    if (int.Parse(ent.CveEstatus) == 1) // Sin Definir Afectado
                    {
                        ((Image)e.Item.FindControl("starSinDefAfect")).Visible = true;
                    }
                    else if (int.Parse(ent.CveEstatus) == 2) // Sin atender
                    {
                        ((Image)e.Item.FindControl("starSinDefAfect")).Visible = true;
                        ((Image)e.Item.FindControl("starSinAtender")).Visible = true;
                    }
                    else if (int.Parse(ent.CveEstatus) == 3) // En proceso
                    {
                        ((Image)e.Item.FindControl("starSinDefAfect")).Visible = true;
                        ((Image)e.Item.FindControl("starSinAtender")).Visible = true;
                        ((Image)e.Item.FindControl("starProceso")).Visible = true;
                    }
                    else if (int.Parse(ent.CveEstatus) == 4) // Atendida
                    {
                        ((Image)e.Item.FindControl("starSinDefAfect")).Visible = true;
                        ((Image)e.Item.FindControl("starSinAtender")).Visible = true;
                        ((Image)e.Item.FindControl("starProceso")).Visible = true;
                        ((Image)e.Item.FindControl("starAtendida")).Visible = true;
                    }


                    // Colocar los Links a los Reportes
                    ((HyperLink)e.Item.FindControl("rptPortadaExpedienteObra")).NavigateUrl = "JavaScript:abre_ventana('800','800','../Reportes/frmVisor.aspx?CveObra=" + ent.CveTrabajoRealizar + "&TipoReporte=1');";
                    ((HyperLink)e.Item.FindControl("rptPermisodePasoObra")).NavigateUrl = "JavaScript:abre_ventana('800','800','../Reportes/frmVisor.aspx?CveObra=" + ent.CveTrabajoRealizar + "&TipoReporte=2');";

                    ((HyperLink)e.Item.FindControl("rptDeclaracioAfectacionObra")).NavigateUrl = "JavaScript:abre_ventana('800','800','../Reportes/frmVisor.aspx?CveObra=" + ent.CveTrabajoRealizar + "&TipoReporte=3');";

                    ((HyperLink)e.Item.FindControl("rptIntegraciondeExpedienteObra")).NavigateUrl = "JavaScript:abre_ventana('800','800','../Reportes/frmVisor.aspx?CveObra=" + ent.CveTrabajoRealizar + "&TipoReporte=4');";
                    ((HyperLink)e.Item.FindControl("rptActaPagoCercaObra")).NavigateUrl = "JavaScript:abre_ventana('800','800','../Reportes/frmVisor.aspx?CveObra=" + ent.CveTrabajoRealizar + "&TipoReporte=5');";
                    ((HyperLink)e.Item.FindControl("rptConvenioPagoCercaObra")).NavigateUrl = "JavaScript:abre_ventana('800','800','../Reportes/frmVisor.aspx?CveObra=" + ent.CveTrabajoRealizar + "&TipoReporte=6');";
                    ((HyperLink)e.Item.FindControl("rptReporteDanosObra")).NavigateUrl = "JavaScript:abre_ventana('800','800','../Reportes/frmVisor.aspx?CveObra=" + ent.CveTrabajoRealizar + "&TipoReporte=7');";
                    //

                }
                else 
                {
                    ((Label)e.Item.FindControl("lblStatus")).Visible = true;
                    ((Label)e.Item.FindControl("lblStatus")).Text = int.Parse(ent.EstatusSolicitud) == -1 ? "Por Solicitar" : "Solicitada" ;

                    ((HtmlGenericControl)e.Item.FindControl("spanReportes")).Visible=false;
                    // Deshabilitar la opcion de ver el detalle de afectados
                    ((LinkButton)e.Item.FindControl("lnkTitulo")).Enabled = false;
                    // Quitar el underline para que visualmente se vea que no hay accion disponible
                    ((LinkButton)e.Item.FindControl("lnkTitulo")).Style.Add("text-decoration", "none");

                    ((HtmlGenericControl)e.Item.FindControl("divAgregarAfectados")).Visible = false;
                    
                }
                tempObrNbr = ++totalObras;
                ((Label)e.Item.FindControl("lblNumero")).Text = tempObrNbr.ToString();

                LinkButton btnEliminar = (LinkButton)e.Item.FindControl("lnkEliminar");
                if (btnEliminar != null)
                    btnEliminar.Attributes.Add("onclick", "javascript:return " + "confirm('Esta seguro de eliminar esta Obra?. " + "')");
                
            }
        }

        protected void rptAfectados_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                EntSolicitudAfectado ent = ((EntSolicitudAfectado)e.Item.DataItem);
                if (ent.FechaObtencionPerPaso == string.Empty || ent.FechaEnvioPermisoPaso == string.Empty) // Sin obtencion de Permiso de Paso
                {
                    ((Image)e.Item.FindControl("starSinAtender")).Visible = true;
                    if (ent.FechaObtencionPerPaso == string.Empty)
                        ((Image)e.Item.FindControl("starSinAtender")).ToolTip = "Sin obtención de Permiso de Paso";
                    else if (ent.FechaEnvioPermisoPaso == string.Empty)
                        ((Image)e.Item.FindControl("starSinAtender")).ToolTip = "Sin fecha de envio de Permiso de Paso";
                }
                else if (ent.FechaEnvioPermisoPaso != string.Empty) // Atendida
                {
                    ((Image)e.Item.FindControl("starSinAtender")).Visible = true;
                    ((Image)e.Item.FindControl("starSinAtender")).ToolTip = "Permiso de Paso obtenido";
                    ((Image)e.Item.FindControl("starAtendida")).Visible = true;
                    ((Image)e.Item.FindControl("starAtendida")).ToolTip = "Permiso de Paso enviado";
                }

                // Colocar los Links a los Reportes
                ((HyperLink)e.Item.FindControl("rptPortadaExpediente")).NavigateUrl = "JavaScript:abre_ventana('800','800','../Reportes/frmVisor.aspx?Afectados=" + ent.CveSolicitudAfectado + "&TipoReporte=1');";
                ((HyperLink)e.Item.FindControl("rptPermisodePaso")).NavigateUrl = "JavaScript:abre_ventana('800','800','../Reportes/frmVisor.aspx?Afectados=" + ent.CveSolicitudAfectado + "&TipoReporte=2');";

                ((HyperLink)e.Item.FindControl("rptDeclaracioAfectacion")).NavigateUrl = "JavaScript:abre_ventana('800','800','../Reportes/frmVisor.aspx?Afectados=" + ent.CveSolicitudAfectado + "&TipoReporte=3');";

                ((HyperLink)e.Item.FindControl("rptIntegraciondeExpediente")).NavigateUrl = "JavaScript:abre_ventana('800','800','../Reportes/frmVisor.aspx?Afectados=" + ent.CveSolicitudAfectado + "&TipoReporte=4');";
                ((HyperLink)e.Item.FindControl("rptActaPagoCerca")).NavigateUrl = "JavaScript:abre_ventana('800','800','../Reportes/frmVisor.aspx?Afectados=" + ent.CveSolicitudAfectado + "&TipoReporte=5');";
                ((HyperLink)e.Item.FindControl("rptConvenioPagoCerca")).NavigateUrl = "JavaScript:abre_ventana('800','800','../Reportes/frmVisor.aspx?Afectados=" + ent.CveSolicitudAfectado + "&TipoReporte=6');";
                ((HyperLink)e.Item.FindControl("rptReporteDanos")).NavigateUrl = "JavaScript:abre_ventana('800','800','../Reportes/frmVisor.aspx?Afectados=" + ent.CveSolicitudAfectado + "&TipoReporte=7');";
                //

                totalAfectado++;
                ((Label)e.Item.FindControl("lblNumero")).Text = totalAfectado.ToString();

                LinkButton btnEliminar = (LinkButton)e.Item.FindControl("lnkEliminar");
                if (btnEliminar != null)
                    btnEliminar.Attributes.Add("onclick", "javascript:return " + "confirm('Esta seguro de eliminar este afectado?. " + "')");
            }
        }

        protected void rptAfectados_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            if (e.CommandName == "Eliminar")
            {
                CtrlSolicitudAfectadoParticular ctrl = new CtrlSolicitudAfectadoParticular();
                int claveAfectado= int.Parse(e.CommandArgument.ToString());
                ctrl.Eliminar(new EntSolicitudAfectado() { CveSolicitudAfectado = claveAfectado});

                List<IEntidad> lista = (List<IEntidad>)ObtenerEstado("listaAfectados");
                int index = lista.FindIndex(o => ((EntSolicitudAfectado)o).CveSolicitudAfectado == claveAfectado);
                lista.RemoveAt(index);
                rptAfectados.DataSource = lista;
                rptAfectados.DataBind();
                GuardarEstado("listaAfectados", lista);
                UpdatePanelAfectados.Update();

                CtrlSolicitudTrabajosRealizar ctrl2 = new CtrlSolicitudTrabajosRealizar();
                List<EntObraConDetalle> lista2 = ctrl2.CriteriosObtenerTodosBandeja(this.cadCriterio, this.cadOrden, usuario);

                rptConsulta.DataSource = lista2;
                rptConsulta.DataBind();

                GuardarEstado("listaObras", lista2);
                RegistrarPostBackAsincronosRepeater();
                UpdatePanelResultado.Update();                
            }
        }

    }
}